//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS OpenSearch service.
///
/// Use the Amazon OpenSearch Service configuration API to create, configure, and manage OpenSearch Service domains. The endpoint for configuration service requests is Region specific: es.region.amazonaws.com. For example, es.us-east-1.amazonaws.com. For a current list of supported Regions and endpoints, see Amazon Web Services service endpoints.
public struct OpenSearch: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the OpenSearch client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "OpenSearch",
            serviceIdentifier: "es",
            serviceProtocol: .restjson,
            apiVersion: "2021-01-01",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: OpenSearchErrorType.self,
            xmlNamespace: "http://es.amazonaws.com/doc/2021-01-01/",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack]: .init(endpoints: [
            "af-south-1": "aos.af-south-1.api.aws",
            "ap-east-1": "aos.ap-east-1.api.aws",
            "ap-northeast-1": "aos.ap-northeast-1.api.aws",
            "ap-northeast-2": "aos.ap-northeast-2.api.aws",
            "ap-northeast-3": "aos.ap-northeast-3.api.aws",
            "ap-south-1": "aos.ap-south-1.api.aws",
            "ap-south-2": "aos.ap-south-2.api.aws",
            "ap-southeast-1": "aos.ap-southeast-1.api.aws",
            "ap-southeast-2": "aos.ap-southeast-2.api.aws",
            "ap-southeast-3": "aos.ap-southeast-3.api.aws",
            "ap-southeast-4": "aos.ap-southeast-4.api.aws",
            "ap-southeast-5": "aos.ap-southeast-5.api.aws",
            "ap-southeast-7": "aos.ap-southeast-7.api.aws",
            "ca-central-1": "aos.ca-central-1.api.aws",
            "ca-west-1": "aos.ca-west-1.api.aws",
            "cn-north-1": "aos.cn-north-1.api.amazonwebservices.com.cn",
            "cn-northwest-1": "aos.cn-northwest-1.api.amazonwebservices.com.cn",
            "eu-central-1": "aos.eu-central-1.api.aws",
            "eu-central-2": "aos.eu-central-2.api.aws",
            "eu-north-1": "aos.eu-north-1.api.aws",
            "eu-south-1": "aos.eu-south-1.api.aws",
            "eu-south-2": "aos.eu-south-2.api.aws",
            "eu-west-1": "aos.eu-west-1.api.aws",
            "eu-west-2": "aos.eu-west-2.api.aws",
            "eu-west-3": "aos.eu-west-3.api.aws",
            "il-central-1": "aos.il-central-1.api.aws",
            "me-central-1": "aos.me-central-1.api.aws",
            "me-south-1": "aos.me-south-1.api.aws",
            "mx-central-1": "aos.mx-central-1.api.aws",
            "sa-east-1": "aos.sa-east-1.api.aws",
            "us-east-1": "aos.us-east-1.api.aws",
            "us-east-2": "aos.us-east-2.api.aws",
            "us-gov-east-1": "aos.us-gov-east-1.api.aws",
            "us-gov-west-1": "aos.us-gov-west-1.api.aws",
            "us-west-1": "aos.us-west-1.api.aws",
            "us-west-2": "aos.us-west-2.api.aws"
        ]),
        [.fips]: .init(endpoints: [
            "us-east-1": "es-fips.us-east-1.amazonaws.com",
            "us-east-2": "es-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "es-fips.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "es-fips.us-gov-west-1.amazonaws.com",
            "us-west-1": "es-fips.us-west-1.amazonaws.com",
            "us-west-2": "es-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Allows the destination Amazon OpenSearch Service domain owner to accept an inbound cross-cluster search connection request. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func acceptInboundConnection(_ input: AcceptInboundConnectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AcceptInboundConnectionResponse {
        try await self.client.execute(
            operation: "AcceptInboundConnection", 
            path: "/2021-01-01/opensearch/cc/inboundConnection/{ConnectionId}/accept", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the destination Amazon OpenSearch Service domain owner to accept an inbound cross-cluster search connection request. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - connectionId: The ID of the inbound connection to accept.
    ///   - logger: Logger use during operation
    @inlinable
    public func acceptInboundConnection(
        connectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AcceptInboundConnectionResponse {
        let input = AcceptInboundConnectionRequest(
            connectionId: connectionId
        )
        return try await self.acceptInboundConnection(input, logger: logger)
    }

    /// Creates a new direct-query data source to the specified domain. For more information, see Creating Amazon OpenSearch Service data source integrations with Amazon S3.
    @Sendable
    @inlinable
    public func addDataSource(_ input: AddDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddDataSourceResponse {
        try await self.client.execute(
            operation: "AddDataSource", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dataSource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new direct-query data source to the specified domain. For more information, see Creating Amazon OpenSearch Service data source integrations with Amazon S3.
    ///
    /// Parameters:
    ///   - dataSourceType: The type of data source.
    ///   - description: A description of the data source.
    ///   - domainName: The name of the domain to add the data source to.
    ///   - name: A name for the data source.
    ///   - logger: Logger use during operation
    @inlinable
    public func addDataSource(
        dataSourceType: DataSourceType,
        description: String? = nil,
        domainName: String,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddDataSourceResponse {
        let input = AddDataSourceRequest(
            dataSourceType: dataSourceType, 
            description: description, 
            domainName: domainName, 
            name: name
        )
        return try await self.addDataSource(input, logger: logger)
    }

    ///  Adds a new data source in Amazon OpenSearch Service  so that you can perform direct queries on external data.
    @Sendable
    @inlinable
    public func addDirectQueryDataSource(_ input: AddDirectQueryDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddDirectQueryDataSourceResponse {
        try await self.client.execute(
            operation: "AddDirectQueryDataSource", 
            path: "/2021-01-01/opensearch/directQueryDataSource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Adds a new data source in Amazon OpenSearch Service  so that you can perform direct queries on external data.
    ///
    /// Parameters:
    ///   - dataSourceName:  A unique, user-defined label to identify the data source  within your OpenSearch Service environment.
    ///   - dataSourceType:  The supported Amazon Web Services service that you want to use as the source for direct queries in OpenSearch Service.
    ///   - description:  An optional text field for providing additional context and details about the data source.
    ///   - openSearchArns:  A list of Amazon Resource Names (ARNs) for the OpenSearch  collections that are associated with the direct query data source.
    ///   - tagList: 
    ///   - logger: Logger use during operation
    @inlinable
    public func addDirectQueryDataSource(
        dataSourceName: String,
        dataSourceType: DirectQueryDataSourceType,
        description: String? = nil,
        openSearchArns: [String],
        tagList: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddDirectQueryDataSourceResponse {
        let input = AddDirectQueryDataSourceRequest(
            dataSourceName: dataSourceName, 
            dataSourceType: dataSourceType, 
            description: description, 
            openSearchArns: openSearchArns, 
            tagList: tagList
        )
        return try await self.addDirectQueryDataSource(input, logger: logger)
    }

    /// Attaches tags to an existing Amazon OpenSearch Service domain, data source, or application.  Tags are a set of case-sensitive key-value pairs. A domain, data source, or application can have up to 10 tags. For more information, see Tagging Amazon OpenSearch Service resources.
    @Sendable
    @inlinable
    public func addTags(_ input: AddTagsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AddTags", 
            path: "/2021-01-01/tags", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches tags to an existing Amazon OpenSearch Service domain, data source, or application.  Tags are a set of case-sensitive key-value pairs. A domain, data source, or application can have up to 10 tags. For more information, see Tagging Amazon OpenSearch Service resources.
    ///
    /// Parameters:
    ///   - arn: Amazon Resource Name (ARN) for the OpenSearch Service domain, data source, or application to which you want to attach resource tags.
    ///   - tagList: List of resource tags.
    ///   - logger: Logger use during operation
    @inlinable
    public func addTags(
        arn: String,
        tagList: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AddTagsRequest(
            arn: arn, 
            tagList: tagList
        )
        return try await self.addTags(input, logger: logger)
    }

    /// Associates a package with an Amazon OpenSearch Service domain. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func associatePackage(_ input: AssociatePackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AssociatePackageResponse {
        try await self.client.execute(
            operation: "AssociatePackage", 
            path: "/2021-01-01/packages/associate/{PackageID}/{DomainName}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates a package with an Amazon OpenSearch Service domain. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - associationConfiguration: The configuration for associating a package with an Amazon OpenSearch Service domain.
    ///   - domainName: Name of the domain to associate the package with.
    ///   - packageID: Internal ID of the package to associate with a domain. Use DescribePackages to find this value.
    ///   - prerequisitePackageIDList: A list of package IDs that must be associated with the domain before the package specified in the request can be associated.
    ///   - logger: Logger use during operation
    @inlinable
    public func associatePackage(
        associationConfiguration: PackageAssociationConfiguration? = nil,
        domainName: String,
        packageID: String,
        prerequisitePackageIDList: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AssociatePackageResponse {
        let input = AssociatePackageRequest(
            associationConfiguration: associationConfiguration, 
            domainName: domainName, 
            packageID: packageID, 
            prerequisitePackageIDList: prerequisitePackageIDList
        )
        return try await self.associatePackage(input, logger: logger)
    }

    /// Operation in the Amazon OpenSearch Service API for associating  multiple packages with a domain simultaneously.
    @Sendable
    @inlinable
    public func associatePackages(_ input: AssociatePackagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AssociatePackagesResponse {
        try await self.client.execute(
            operation: "AssociatePackages", 
            path: "/2021-01-01/packages/associateMultiple", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Operation in the Amazon OpenSearch Service API for associating  multiple packages with a domain simultaneously.
    ///
    /// Parameters:
    ///   - domainName: 
    ///   - packageList: A list of packages and their prerequisites to be associated with a domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func associatePackages(
        domainName: String,
        packageList: [PackageDetailsForAssociation],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AssociatePackagesResponse {
        let input = AssociatePackagesRequest(
            domainName: domainName, 
            packageList: packageList
        )
        return try await self.associatePackages(input, logger: logger)
    }

    /// Provides access to an Amazon OpenSearch Service domain through the use of an interface VPC endpoint.
    @Sendable
    @inlinable
    public func authorizeVpcEndpointAccess(_ input: AuthorizeVpcEndpointAccessRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AuthorizeVpcEndpointAccessResponse {
        try await self.client.execute(
            operation: "AuthorizeVpcEndpointAccess", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/authorizeVpcEndpointAccess", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides access to an Amazon OpenSearch Service domain through the use of an interface VPC endpoint.
    ///
    /// Parameters:
    ///   - account: The Amazon Web Services account ID to grant access to.
    ///   - domainName: The name of the OpenSearch Service domain to provide access to.
    ///   - service: The Amazon Web Services service SP to grant access to.
    ///   - logger: Logger use during operation
    @inlinable
    public func authorizeVpcEndpointAccess(
        account: String? = nil,
        domainName: String,
        service: AWSServicePrincipal? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AuthorizeVpcEndpointAccessResponse {
        let input = AuthorizeVpcEndpointAccessRequest(
            account: account, 
            domainName: domainName, 
            service: service
        )
        return try await self.authorizeVpcEndpointAccess(input, logger: logger)
    }

    /// Cancels a pending configuration change on an Amazon OpenSearch Service domain.
    @Sendable
    @inlinable
    public func cancelDomainConfigChange(_ input: CancelDomainConfigChangeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelDomainConfigChangeResponse {
        try await self.client.execute(
            operation: "CancelDomainConfigChange", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/config/cancel", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Cancels a pending configuration change on an Amazon OpenSearch Service domain.
    ///
    /// Parameters:
    ///   - domainName: 
    ///   - dryRun: When set to True, returns the list of change IDs and properties that will be cancelled without actually cancelling the change.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelDomainConfigChange(
        domainName: String,
        dryRun: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelDomainConfigChangeResponse {
        let input = CancelDomainConfigChangeRequest(
            domainName: domainName, 
            dryRun: dryRun
        )
        return try await self.cancelDomainConfigChange(input, logger: logger)
    }

    /// Cancels a scheduled service software update for an Amazon OpenSearch Service domain. You can only perform this operation before the AutomatedUpdateDate and when the domain's UpdateStatus is PENDING_UPDATE. For more information, see Service software updates in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func cancelServiceSoftwareUpdate(_ input: CancelServiceSoftwareUpdateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelServiceSoftwareUpdateResponse {
        try await self.client.execute(
            operation: "CancelServiceSoftwareUpdate", 
            path: "/2021-01-01/opensearch/serviceSoftwareUpdate/cancel", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Cancels a scheduled service software update for an Amazon OpenSearch Service domain. You can only perform this operation before the AutomatedUpdateDate and when the domain's UpdateStatus is PENDING_UPDATE. For more information, see Service software updates in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - domainName: Name of the OpenSearch Service domain that you want to cancel the service software update on.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelServiceSoftwareUpdate(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelServiceSoftwareUpdateResponse {
        let input = CancelServiceSoftwareUpdateRequest(
            domainName: domainName
        )
        return try await self.cancelServiceSoftwareUpdate(input, logger: logger)
    }

    /// Creates an OpenSearch UI application. For more information, see Using the OpenSearch user interface in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func createApplication(_ input: CreateApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateApplicationResponse {
        try await self.client.execute(
            operation: "CreateApplication", 
            path: "/2021-01-01/opensearch/application", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an OpenSearch UI application. For more information, see Using the OpenSearch user interface in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - appConfigs: Configuration settings for the OpenSearch application, including administrative options.
    ///   - clientToken: Unique, case-sensitive identifier to ensure idempotency of the request.
    ///   - dataSources: The data sources to link to the OpenSearch application.
    ///   - iamIdentityCenterOptions: Configuration settings for integrating Amazon Web Services IAM Identity Center with the OpenSearch application.
    ///   - name: The unique name of the OpenSearch application. Names must be unique within an Amazon Web Services Region for each account.
    ///   - tagList: 
    ///   - logger: Logger use during operation
    @inlinable
    public func createApplication(
        appConfigs: [AppConfig]? = nil,
        clientToken: String? = CreateApplicationRequest.idempotencyToken(),
        dataSources: [DataSource]? = nil,
        iamIdentityCenterOptions: IamIdentityCenterOptionsInput? = nil,
        name: String,
        tagList: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateApplicationResponse {
        let input = CreateApplicationRequest(
            appConfigs: appConfigs, 
            clientToken: clientToken, 
            dataSources: dataSources, 
            iamIdentityCenterOptions: iamIdentityCenterOptions, 
            name: name, 
            tagList: tagList
        )
        return try await self.createApplication(input, logger: logger)
    }

    /// Creates an Amazon OpenSearch Service domain. For more information, see Creating and managing Amazon OpenSearch Service domains.
    @Sendable
    @inlinable
    public func createDomain(_ input: CreateDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDomainResponse {
        try await self.client.execute(
            operation: "CreateDomain", 
            path: "/2021-01-01/opensearch/domain", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon OpenSearch Service domain. For more information, see Creating and managing Amazon OpenSearch Service domains.
    ///
    /// Parameters:
    ///   - accessPolicies: Identity and Access Management (IAM) policy document specifying the access policies for the new domain.
    ///   - advancedOptions: Key-value pairs to specify advanced configuration options. The following key-value pairs are supported:    "rest.action.multi.allow_explicit_index": "true" | "false" - Note the use of a string rather than a boolean. Specifies whether explicit references to indexes are allowed inside the body of HTTP requests. If you want to configure access policies for domain sub-resources, such as specific indexes and domain APIs, you must disable this property. Default is true.    "indices.fielddata.cache.size": "80"  - Note the use of a string rather than a boolean. Specifies the percentage of heap space allocated to field data. Default is unbounded.    "indices.query.bool.max_clause_count": "1024" - Note the use of a string rather than a boolean. Specifies the maximum number of clauses allowed in a Lucene boolean query. Default is 1,024. Queries with more than the permitted number of clauses result in a TooManyClauses error.    "override_main_response_version": "true" | "false" - Note the use of a string rather than a boolean. Specifies whether the domain reports its version as 7.10 to allow Elasticsearch OSS clients and plugins to continue working with it. Default is false when creating a domain and true when upgrading a domain.   For more information, see Advanced cluster parameters.
    ///   - advancedSecurityOptions: Options for fine-grained access control.
    ///   - aimlOptions: Options for all machine learning features for the specified domain.
    ///   - autoTuneOptions: Options for Auto-Tune.
    ///   - clusterConfig: Container for the cluster configuration of a domain.
    ///   - cognitoOptions: Key-value pairs to configure Amazon Cognito authentication. For more information, see Configuring Amazon Cognito authentication for OpenSearch Dashboards.
    ///   - domainEndpointOptions: Additional options for the domain endpoint, such as whether to require HTTPS for all traffic.
    ///   - domainName: Name of the OpenSearch Service domain to create. Domain names are unique across the domains owned by an account within an Amazon Web Services Region.
    ///   - ebsOptions: Container for the parameters required to enable EBS-based storage for an OpenSearch Service domain.
    ///   - encryptionAtRestOptions: Key-value pairs to enable encryption at rest.
    ///   - engineVersion: String of format Elasticsearch_X.Y or OpenSearch_X.Y to specify the engine version for the OpenSearch Service domain. For example, OpenSearch_1.0 or Elasticsearch_7.9. For more information, see Creating and managing Amazon OpenSearch Service domains.
    ///   - identityCenterOptions: Configuration options for enabling and managing IAM Identity Center integration within a domain.
    ///   - ipAddressType: Specify either dual stack or IPv4 as your IP address type. Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is the recommended option.  If you set your IP address type to dual stack, you can't change your address type later.
    ///   - logPublishingOptions: Key-value pairs to configure log publishing.
    ///   - nodeToNodeEncryptionOptions: Enables node-to-node encryption.
    ///   - offPeakWindowOptions: Specifies a daily 10-hour time block during which OpenSearch Service can perform configuration changes on the domain, including service software updates and Auto-Tune enhancements that require a blue/green deployment. If no options are specified, the default start time of 10:00 P.M. local time (for the Region that the domain is created in) is used.
    ///   - snapshotOptions: DEPRECATED. Container for the parameters required to configure automated snapshots of domain indexes.
    ///   - softwareUpdateOptions: Software update options for the domain.
    ///   - tagList: List of tags to add to the domain upon creation.
    ///   - vpcOptions: Container for the values required to configure VPC access domains. If you don't specify these values, OpenSearch Service creates the domain with a public endpoint. For more information, see Launching your Amazon OpenSearch Service domains using a VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDomain(
        accessPolicies: String? = nil,
        advancedOptions: [String: String]? = nil,
        advancedSecurityOptions: AdvancedSecurityOptionsInput? = nil,
        aimlOptions: AIMLOptionsInput? = nil,
        autoTuneOptions: AutoTuneOptionsInput? = nil,
        clusterConfig: ClusterConfig? = nil,
        cognitoOptions: CognitoOptions? = nil,
        domainEndpointOptions: DomainEndpointOptions? = nil,
        domainName: String,
        ebsOptions: EBSOptions? = nil,
        encryptionAtRestOptions: EncryptionAtRestOptions? = nil,
        engineVersion: String? = nil,
        identityCenterOptions: IdentityCenterOptionsInput? = nil,
        ipAddressType: IPAddressType? = nil,
        logPublishingOptions: [LogType: LogPublishingOption]? = nil,
        nodeToNodeEncryptionOptions: NodeToNodeEncryptionOptions? = nil,
        offPeakWindowOptions: OffPeakWindowOptions? = nil,
        snapshotOptions: SnapshotOptions? = nil,
        softwareUpdateOptions: SoftwareUpdateOptions? = nil,
        tagList: [Tag]? = nil,
        vpcOptions: VPCOptions? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDomainResponse {
        let input = CreateDomainRequest(
            accessPolicies: accessPolicies, 
            advancedOptions: advancedOptions, 
            advancedSecurityOptions: advancedSecurityOptions, 
            aimlOptions: aimlOptions, 
            autoTuneOptions: autoTuneOptions, 
            clusterConfig: clusterConfig, 
            cognitoOptions: cognitoOptions, 
            domainEndpointOptions: domainEndpointOptions, 
            domainName: domainName, 
            ebsOptions: ebsOptions, 
            encryptionAtRestOptions: encryptionAtRestOptions, 
            engineVersion: engineVersion, 
            identityCenterOptions: identityCenterOptions, 
            ipAddressType: ipAddressType, 
            logPublishingOptions: logPublishingOptions, 
            nodeToNodeEncryptionOptions: nodeToNodeEncryptionOptions, 
            offPeakWindowOptions: offPeakWindowOptions, 
            snapshotOptions: snapshotOptions, 
            softwareUpdateOptions: softwareUpdateOptions, 
            tagList: tagList, 
            vpcOptions: vpcOptions
        )
        return try await self.createDomain(input, logger: logger)
    }

    /// Creates a new cross-cluster search connection from a source Amazon OpenSearch Service domain to a destination domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func createOutboundConnection(_ input: CreateOutboundConnectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateOutboundConnectionResponse {
        try await self.client.execute(
            operation: "CreateOutboundConnection", 
            path: "/2021-01-01/opensearch/cc/outboundConnection", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new cross-cluster search connection from a source Amazon OpenSearch Service domain to a destination domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - connectionAlias: Name of the connection.
    ///   - connectionMode: The connection mode.
    ///   - connectionProperties: The ConnectionProperties for the outbound connection.
    ///   - localDomainInfo: Name and Region of the source (local) domain.
    ///   - remoteDomainInfo: Name and Region of the destination (remote) domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func createOutboundConnection(
        connectionAlias: String,
        connectionMode: ConnectionMode? = nil,
        connectionProperties: ConnectionProperties? = nil,
        localDomainInfo: DomainInformationContainer,
        remoteDomainInfo: DomainInformationContainer,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateOutboundConnectionResponse {
        let input = CreateOutboundConnectionRequest(
            connectionAlias: connectionAlias, 
            connectionMode: connectionMode, 
            connectionProperties: connectionProperties, 
            localDomainInfo: localDomainInfo, 
            remoteDomainInfo: remoteDomainInfo
        )
        return try await self.createOutboundConnection(input, logger: logger)
    }

    /// Creates a package for use with Amazon OpenSearch Service domains. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func createPackage(_ input: CreatePackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePackageResponse {
        try await self.client.execute(
            operation: "CreatePackage", 
            path: "/2021-01-01/packages", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a package for use with Amazon OpenSearch Service domains. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - engineVersion: The version of the Amazon OpenSearch Service engine for which is compatible with the package. This can only be specified for package type ZIP-PLUGIN
    ///   - packageConfiguration:  The configuration parameters for the package being created.
    ///   - packageDescription: Description of the package.
    ///   - packageEncryptionOptions: The encryption parameters for the package being created.
    ///   - packageName: Unique name for the package.
    ///   - packageSource: The Amazon S3 location from which to import the package.
    ///   - packageType: The type of package.
    ///   - packageVendingOptions:  The vending options for the package being created. They determine if the package can be vended to other users.
    ///   - logger: Logger use during operation
    @inlinable
    public func createPackage(
        engineVersion: String? = nil,
        packageConfiguration: PackageConfiguration? = nil,
        packageDescription: String? = nil,
        packageEncryptionOptions: PackageEncryptionOptions? = nil,
        packageName: String,
        packageSource: PackageSource,
        packageType: PackageType,
        packageVendingOptions: PackageVendingOptions? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePackageResponse {
        let input = CreatePackageRequest(
            engineVersion: engineVersion, 
            packageConfiguration: packageConfiguration, 
            packageDescription: packageDescription, 
            packageEncryptionOptions: packageEncryptionOptions, 
            packageName: packageName, 
            packageSource: packageSource, 
            packageType: packageType, 
            packageVendingOptions: packageVendingOptions
        )
        return try await self.createPackage(input, logger: logger)
    }

    /// Creates an Amazon OpenSearch Service-managed VPC endpoint.
    @Sendable
    @inlinable
    public func createVpcEndpoint(_ input: CreateVpcEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateVpcEndpointResponse {
        try await self.client.execute(
            operation: "CreateVpcEndpoint", 
            path: "/2021-01-01/opensearch/vpcEndpoints", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon OpenSearch Service-managed VPC endpoint.
    ///
    /// Parameters:
    ///   - clientToken: Unique, case-sensitive identifier to ensure idempotency of the request.
    ///   - domainArn: The Amazon Resource Name (ARN) of the domain to create the endpoint for.
    ///   - vpcOptions: Options to specify the subnets and security groups for the endpoint.
    ///   - logger: Logger use during operation
    @inlinable
    public func createVpcEndpoint(
        clientToken: String? = nil,
        domainArn: String,
        vpcOptions: VPCOptions,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateVpcEndpointResponse {
        let input = CreateVpcEndpointRequest(
            clientToken: clientToken, 
            domainArn: domainArn, 
            vpcOptions: vpcOptions
        )
        return try await self.createVpcEndpoint(input, logger: logger)
    }

    /// Deletes a specified OpenSearch application.
    @Sendable
    @inlinable
    public func deleteApplication(_ input: DeleteApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteApplicationResponse {
        try await self.client.execute(
            operation: "DeleteApplication", 
            path: "/2021-01-01/opensearch/application/{id}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specified OpenSearch application.
    ///
    /// Parameters:
    ///   - id: The unique identifier of the OpenSearch application to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplication(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteApplicationResponse {
        let input = DeleteApplicationRequest(
            id: id
        )
        return try await self.deleteApplication(input, logger: logger)
    }

    /// Deletes a direct-query data source. For more information, see Deleting an Amazon OpenSearch Service data source with Amazon S3.
    @Sendable
    @inlinable
    public func deleteDataSource(_ input: DeleteDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDataSourceResponse {
        try await self.client.execute(
            operation: "DeleteDataSource", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dataSource/{Name}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a direct-query data source. For more information, see Deleting an Amazon OpenSearch Service data source with Amazon S3.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - name: The name of the data source to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDataSource(
        domainName: String,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDataSourceResponse {
        let input = DeleteDataSourceRequest(
            domainName: domainName, 
            name: name
        )
        return try await self.deleteDataSource(input, logger: logger)
    }

    ///  Deletes a previously configured direct query data  source from Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func deleteDirectQueryDataSource(_ input: DeleteDirectQueryDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDirectQueryDataSource", 
            path: "/2021-01-01/opensearch/directQueryDataSource/{DataSourceName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Deletes a previously configured direct query data  source from Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - dataSourceName:  A unique, user-defined label to identify the data source  within your OpenSearch Service environment.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDirectQueryDataSource(
        dataSourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDirectQueryDataSourceRequest(
            dataSourceName: dataSourceName
        )
        return try await self.deleteDirectQueryDataSource(input, logger: logger)
    }

    /// Deletes an Amazon OpenSearch Service domain and all of its data. You can't recover a domain after you delete it.
    @Sendable
    @inlinable
    public func deleteDomain(_ input: DeleteDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDomainResponse {
        try await self.client.execute(
            operation: "DeleteDomain", 
            path: "/2021-01-01/opensearch/domain/{DomainName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon OpenSearch Service domain and all of its data. You can't recover a domain after you delete it.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain you want to permanently delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDomain(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDomainResponse {
        let input = DeleteDomainRequest(
            domainName: domainName
        )
        return try await self.deleteDomain(input, logger: logger)
    }

    /// Allows the destination Amazon OpenSearch Service domain owner to delete an existing inbound cross-cluster search connection. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func deleteInboundConnection(_ input: DeleteInboundConnectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInboundConnectionResponse {
        try await self.client.execute(
            operation: "DeleteInboundConnection", 
            path: "/2021-01-01/opensearch/cc/inboundConnection/{ConnectionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the destination Amazon OpenSearch Service domain owner to delete an existing inbound cross-cluster search connection. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - connectionId: The ID of the inbound connection to permanently delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInboundConnection(
        connectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInboundConnectionResponse {
        let input = DeleteInboundConnectionRequest(
            connectionId: connectionId
        )
        return try await self.deleteInboundConnection(input, logger: logger)
    }

    /// Allows the source Amazon OpenSearch Service domain owner to delete an existing outbound cross-cluster search connection. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func deleteOutboundConnection(_ input: DeleteOutboundConnectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOutboundConnectionResponse {
        try await self.client.execute(
            operation: "DeleteOutboundConnection", 
            path: "/2021-01-01/opensearch/cc/outboundConnection/{ConnectionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the source Amazon OpenSearch Service domain owner to delete an existing outbound cross-cluster search connection. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - connectionId: The ID of the outbound connection you want to permanently delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOutboundConnection(
        connectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOutboundConnectionResponse {
        let input = DeleteOutboundConnectionRequest(
            connectionId: connectionId
        )
        return try await self.deleteOutboundConnection(input, logger: logger)
    }

    /// Deletes an Amazon OpenSearch Service package. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func deletePackage(_ input: DeletePackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePackageResponse {
        try await self.client.execute(
            operation: "DeletePackage", 
            path: "/2021-01-01/packages/{PackageID}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon OpenSearch Service package. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - packageID: The internal ID of the package you want to delete. Use DescribePackages to find this value.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePackage(
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePackageResponse {
        let input = DeletePackageRequest(
            packageID: packageID
        )
        return try await self.deletePackage(input, logger: logger)
    }

    /// Deletes an Amazon OpenSearch Service-managed interface VPC endpoint.
    @Sendable
    @inlinable
    public func deleteVpcEndpoint(_ input: DeleteVpcEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteVpcEndpointResponse {
        try await self.client.execute(
            operation: "DeleteVpcEndpoint", 
            path: "/2021-01-01/opensearch/vpcEndpoints/{VpcEndpointId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon OpenSearch Service-managed interface VPC endpoint.
    ///
    /// Parameters:
    ///   - vpcEndpointId: The unique identifier of the endpoint.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteVpcEndpoint(
        vpcEndpointId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteVpcEndpointResponse {
        let input = DeleteVpcEndpointRequest(
            vpcEndpointId: vpcEndpointId
        )
        return try await self.deleteVpcEndpoint(input, logger: logger)
    }

    /// Describes the domain configuration for the specified Amazon OpenSearch Service domain, including the domain ID, domain service endpoint, and domain ARN.
    @Sendable
    @inlinable
    public func describeDomain(_ input: DescribeDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainResponse {
        try await self.client.execute(
            operation: "DescribeDomain", 
            path: "/2021-01-01/opensearch/domain/{DomainName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the domain configuration for the specified Amazon OpenSearch Service domain, including the domain ID, domain service endpoint, and domain ARN.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain that you want information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomain(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainResponse {
        let input = DescribeDomainRequest(
            domainName: domainName
        )
        return try await self.describeDomain(input, logger: logger)
    }

    /// Returns the list of optimizations that Auto-Tune has made to an Amazon OpenSearch Service domain. For more information, see Auto-Tune for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeDomainAutoTunes(_ input: DescribeDomainAutoTunesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainAutoTunesResponse {
        try await self.client.execute(
            operation: "DescribeDomainAutoTunes", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/autoTunes", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of optimizations that Auto-Tune has made to an Amazon OpenSearch Service domain. For more information, see Auto-Tune for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - domainName: Name of the domain that you want Auto-Tune details about.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribeDomainAutoTunes operation returns a nextToken, you can include the returned nextToken in subsequent DescribeDomainAutoTunes operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomainAutoTunes(
        domainName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainAutoTunesResponse {
        let input = DescribeDomainAutoTunesRequest(
            domainName: domainName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeDomainAutoTunes(input, logger: logger)
    }

    /// Returns information about the current blue/green deployment happening on an Amazon OpenSearch Service domain. For more information, see Making configuration changes in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeDomainChangeProgress(_ input: DescribeDomainChangeProgressRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainChangeProgressResponse {
        try await self.client.execute(
            operation: "DescribeDomainChangeProgress", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/progress", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the current blue/green deployment happening on an Amazon OpenSearch Service domain. For more information, see Making configuration changes in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - changeId: The specific change ID for which you want to get progress information. If omitted, the request returns information about the most recent configuration change.
    ///   - domainName: The name of the domain to get progress information for.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomainChangeProgress(
        changeId: String? = nil,
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainChangeProgressResponse {
        let input = DescribeDomainChangeProgressRequest(
            changeId: changeId, 
            domainName: domainName
        )
        return try await self.describeDomainChangeProgress(input, logger: logger)
    }

    /// Returns the configuration of an Amazon OpenSearch Service domain.
    @Sendable
    @inlinable
    public func describeDomainConfig(_ input: DescribeDomainConfigRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainConfigResponse {
        try await self.client.execute(
            operation: "DescribeDomainConfig", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/config", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the configuration of an Amazon OpenSearch Service domain.
    ///
    /// Parameters:
    ///   - domainName: Name of the OpenSearch Service domain configuration that you want to describe.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomainConfig(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainConfigResponse {
        let input = DescribeDomainConfigRequest(
            domainName: domainName
        )
        return try await self.describeDomainConfig(input, logger: logger)
    }

    /// Returns information about domain and node health, the standby Availability Zone, number of nodes per Availability Zone, and shard count per node.
    @Sendable
    @inlinable
    public func describeDomainHealth(_ input: DescribeDomainHealthRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainHealthResponse {
        try await self.client.execute(
            operation: "DescribeDomainHealth", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/health", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about domain and node health, the standby Availability Zone, number of nodes per Availability Zone, and shard count per node.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomainHealth(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainHealthResponse {
        let input = DescribeDomainHealthRequest(
            domainName: domainName
        )
        return try await self.describeDomainHealth(input, logger: logger)
    }

    /// Returns information about domain and nodes, including data nodes, master nodes, ultrawarm nodes, Availability Zone(s), standby nodes, node configurations, and node states.
    @Sendable
    @inlinable
    public func describeDomainNodes(_ input: DescribeDomainNodesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainNodesResponse {
        try await self.client.execute(
            operation: "DescribeDomainNodes", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/nodes", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about domain and nodes, including data nodes, master nodes, ultrawarm nodes, Availability Zone(s), standby nodes, node configurations, and node states.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomainNodes(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainNodesResponse {
        let input = DescribeDomainNodesRequest(
            domainName: domainName
        )
        return try await self.describeDomainNodes(input, logger: logger)
    }

    /// Returns domain configuration information about the specified Amazon OpenSearch Service domains.
    @Sendable
    @inlinable
    public func describeDomains(_ input: DescribeDomainsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDomainsResponse {
        try await self.client.execute(
            operation: "DescribeDomains", 
            path: "/2021-01-01/opensearch/domain-info", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns domain configuration information about the specified Amazon OpenSearch Service domains.
    ///
    /// Parameters:
    ///   - domainNames: Array of OpenSearch Service domain names that you want information about. You must specify at least one domain name.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDomains(
        domainNames: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDomainsResponse {
        let input = DescribeDomainsRequest(
            domainNames: domainNames
        )
        return try await self.describeDomains(input, logger: logger)
    }

    /// Describes the progress of a pre-update dry run analysis on an Amazon OpenSearch Service domain. For more information, see Determining whether a change will cause a blue/green deployment.
    @Sendable
    @inlinable
    public func describeDryRunProgress(_ input: DescribeDryRunProgressRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDryRunProgressResponse {
        try await self.client.execute(
            operation: "DescribeDryRunProgress", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dryRun", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the progress of a pre-update dry run analysis on an Amazon OpenSearch Service domain. For more information, see Determining whether a change will cause a blue/green deployment.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - dryRunId: The unique identifier of the dry run.
    ///   - loadDryRunConfig: Whether to include the configuration of the dry run in the response. The configuration specifies the updates that you're planning to make on the domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDryRunProgress(
        domainName: String,
        dryRunId: String? = nil,
        loadDryRunConfig: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDryRunProgressResponse {
        let input = DescribeDryRunProgressRequest(
            domainName: domainName, 
            dryRunId: dryRunId, 
            loadDryRunConfig: loadDryRunConfig
        )
        return try await self.describeDryRunProgress(input, logger: logger)
    }

    /// Lists all the inbound cross-cluster search connections for a destination (remote) Amazon OpenSearch Service domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeInboundConnections(_ input: DescribeInboundConnectionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInboundConnectionsResponse {
        try await self.client.execute(
            operation: "DescribeInboundConnections", 
            path: "/2021-01-01/opensearch/cc/inboundConnection/search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the inbound cross-cluster search connections for a destination (remote) Amazon OpenSearch Service domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - filters:  A list of filters used to match properties for inbound cross-cluster connections.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribeInboundConnections operation returns a nextToken, you can include the returned nextToken in subsequent DescribeInboundConnections operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInboundConnections(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInboundConnectionsResponse {
        let input = DescribeInboundConnectionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInboundConnections(input, logger: logger)
    }

    /// Describes the instance count, storage, and master node limits for a given OpenSearch or Elasticsearch version and instance type.
    @Sendable
    @inlinable
    public func describeInstanceTypeLimits(_ input: DescribeInstanceTypeLimitsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstanceTypeLimitsResponse {
        try await self.client.execute(
            operation: "DescribeInstanceTypeLimits", 
            path: "/2021-01-01/opensearch/instanceTypeLimits/{EngineVersion}/{InstanceType}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the instance count, storage, and master node limits for a given OpenSearch or Elasticsearch version and instance type.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain. Only specify if you need the limits for an existing domain.
    ///   - engineVersion: Version of OpenSearch or Elasticsearch, in the format Elasticsearch_X.Y or OpenSearch_X.Y. Defaults to the latest version of OpenSearch.
    ///   - instanceType: The OpenSearch Service instance type for which you need limit information.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstanceTypeLimits(
        domainName: String? = nil,
        engineVersion: String,
        instanceType: OpenSearchPartitionInstanceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstanceTypeLimitsResponse {
        let input = DescribeInstanceTypeLimitsRequest(
            domainName: domainName, 
            engineVersion: engineVersion, 
            instanceType: instanceType
        )
        return try await self.describeInstanceTypeLimits(input, logger: logger)
    }

    /// Lists all the outbound cross-cluster connections for a local (source) Amazon OpenSearch Service domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeOutboundConnections(_ input: DescribeOutboundConnectionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOutboundConnectionsResponse {
        try await self.client.execute(
            operation: "DescribeOutboundConnections", 
            path: "/2021-01-01/opensearch/cc/outboundConnection/search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the outbound cross-cluster connections for a local (source) Amazon OpenSearch Service domain. For more information, see Cross-cluster search for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - filters: List of filter names and values that you can use for requests.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribeOutboundConnections operation returns a nextToken, you can include the returned nextToken in subsequent DescribeOutboundConnections operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOutboundConnections(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOutboundConnectionsResponse {
        let input = DescribeOutboundConnectionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeOutboundConnections(input, logger: logger)
    }

    /// Describes all packages available to OpenSearch Service. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describePackages(_ input: DescribePackagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePackagesResponse {
        try await self.client.execute(
            operation: "DescribePackages", 
            path: "/2021-01-01/packages/describe", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes all packages available to OpenSearch Service. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - filters: Only returns packages that match the DescribePackagesFilterList values.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribePackageFilters operation returns a nextToken, you can include the returned nextToken in subsequent DescribePackageFilters operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePackages(
        filters: [DescribePackagesFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePackagesResponse {
        let input = DescribePackagesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describePackages(input, logger: logger)
    }

    /// Describes the available Amazon OpenSearch Service Reserved Instance offerings for a given Region. For more information, see Reserved Instances in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeReservedInstanceOfferings(_ input: DescribeReservedInstanceOfferingsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeReservedInstanceOfferingsResponse {
        try await self.client.execute(
            operation: "DescribeReservedInstanceOfferings", 
            path: "/2021-01-01/opensearch/reservedInstanceOfferings", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the available Amazon OpenSearch Service Reserved Instance offerings for a given Region. For more information, see Reserved Instances in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribeReservedInstanceOfferings operation returns a nextToken, you can include the returned nextToken in subsequent DescribeReservedInstanceOfferings operations, which returns results in the next page.
    ///   - reservedInstanceOfferingId: The Reserved Instance identifier filter value. Use this parameter to show only the available instance types that match the specified reservation identifier.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeReservedInstanceOfferings(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        reservedInstanceOfferingId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeReservedInstanceOfferingsResponse {
        let input = DescribeReservedInstanceOfferingsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            reservedInstanceOfferingId: reservedInstanceOfferingId
        )
        return try await self.describeReservedInstanceOfferings(input, logger: logger)
    }

    /// Describes the Amazon OpenSearch Service instances that you have reserved in a given Region. For more information, see Reserved Instances in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func describeReservedInstances(_ input: DescribeReservedInstancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeReservedInstancesResponse {
        try await self.client.execute(
            operation: "DescribeReservedInstances", 
            path: "/2021-01-01/opensearch/reservedInstances", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the Amazon OpenSearch Service instances that you have reserved in a given Region. For more information, see Reserved Instances in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial DescribeReservedInstances operation returns a nextToken, you can include the returned nextToken in subsequent DescribeReservedInstances operations, which returns results in the next page.
    ///   - reservedInstanceId: The reserved instance identifier filter value. Use this parameter to show only the reservation that matches the specified reserved OpenSearch instance ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeReservedInstances(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        reservedInstanceId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeReservedInstancesResponse {
        let input = DescribeReservedInstancesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            reservedInstanceId: reservedInstanceId
        )
        return try await self.describeReservedInstances(input, logger: logger)
    }

    /// Describes one or more Amazon OpenSearch Service-managed VPC endpoints.
    @Sendable
    @inlinable
    public func describeVpcEndpoints(_ input: DescribeVpcEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeVpcEndpointsResponse {
        try await self.client.execute(
            operation: "DescribeVpcEndpoints", 
            path: "/2021-01-01/opensearch/vpcEndpoints/describe", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes one or more Amazon OpenSearch Service-managed VPC endpoints.
    ///
    /// Parameters:
    ///   - vpcEndpointIds: The unique identifiers of the endpoints to get information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeVpcEndpoints(
        vpcEndpointIds: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeVpcEndpointsResponse {
        let input = DescribeVpcEndpointsRequest(
            vpcEndpointIds: vpcEndpointIds
        )
        return try await self.describeVpcEndpoints(input, logger: logger)
    }

    /// Removes a package from the specified Amazon OpenSearch Service domain. The package can't be in use with any OpenSearch index for the dissociation to succeed. The package is still available in OpenSearch Service for association later. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func dissociatePackage(_ input: DissociatePackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DissociatePackageResponse {
        try await self.client.execute(
            operation: "DissociatePackage", 
            path: "/2021-01-01/packages/dissociate/{PackageID}/{DomainName}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a package from the specified Amazon OpenSearch Service domain. The package can't be in use with any OpenSearch index for the dissociation to succeed. The package is still available in OpenSearch Service for association later. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - domainName: Name of the domain to dissociate the package from.
    ///   - packageID: Internal ID of the package to dissociate from the domain. Use ListPackagesForDomain to find this value.
    ///   - logger: Logger use during operation
    @inlinable
    public func dissociatePackage(
        domainName: String,
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DissociatePackageResponse {
        let input = DissociatePackageRequest(
            domainName: domainName, 
            packageID: packageID
        )
        return try await self.dissociatePackage(input, logger: logger)
    }

    /// Dissociates multiple packages from a domain simulatneously.
    @Sendable
    @inlinable
    public func dissociatePackages(_ input: DissociatePackagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DissociatePackagesResponse {
        try await self.client.execute(
            operation: "DissociatePackages", 
            path: "/2021-01-01/packages/dissociateMultiple", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Dissociates multiple packages from a domain simulatneously.
    ///
    /// Parameters:
    ///   - domainName: 
    ///   - packageList: A list of package IDs to be dissociated from a domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func dissociatePackages(
        domainName: String,
        packageList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DissociatePackagesResponse {
        let input = DissociatePackagesRequest(
            domainName: domainName, 
            packageList: packageList
        )
        return try await self.dissociatePackages(input, logger: logger)
    }

    /// Retrieves the configuration and status of an existing OpenSearch application.
    @Sendable
    @inlinable
    public func getApplication(_ input: GetApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationResponse {
        try await self.client.execute(
            operation: "GetApplication", 
            path: "/2021-01-01/opensearch/application/{id}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the configuration and status of an existing OpenSearch application.
    ///
    /// Parameters:
    ///   - id: The unique identifier of the OpenSearch application to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplication(
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationResponse {
        let input = GetApplicationRequest(
            id: id
        )
        return try await self.getApplication(input, logger: logger)
    }

    /// Returns a map of OpenSearch or Elasticsearch versions and the versions you can upgrade them to.
    @Sendable
    @inlinable
    public func getCompatibleVersions(_ input: GetCompatibleVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCompatibleVersionsResponse {
        try await self.client.execute(
            operation: "GetCompatibleVersions", 
            path: "/2021-01-01/opensearch/compatibleVersions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a map of OpenSearch or Elasticsearch versions and the versions you can upgrade them to.
    ///
    /// Parameters:
    ///   - domainName: The name of an existing domain. Provide this parameter to limit the results to a single domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCompatibleVersions(
        domainName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCompatibleVersionsResponse {
        let input = GetCompatibleVersionsRequest(
            domainName: domainName
        )
        return try await self.getCompatibleVersions(input, logger: logger)
    }

    /// Retrieves information about a direct query data source.
    @Sendable
    @inlinable
    public func getDataSource(_ input: GetDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDataSourceResponse {
        try await self.client.execute(
            operation: "GetDataSource", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dataSource/{Name}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about a direct query data source.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - name: The name of the data source to get information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDataSource(
        domainName: String,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDataSourceResponse {
        let input = GetDataSourceRequest(
            domainName: domainName, 
            name: name
        )
        return try await self.getDataSource(input, logger: logger)
    }

    ///  Returns detailed configuration information for  a specific direct query data source in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func getDirectQueryDataSource(_ input: GetDirectQueryDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDirectQueryDataSourceResponse {
        try await self.client.execute(
            operation: "GetDirectQueryDataSource", 
            path: "/2021-01-01/opensearch/directQueryDataSource/{DataSourceName}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Returns detailed configuration information for  a specific direct query data source in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - dataSourceName:  A unique, user-defined label that identifies the data source within  your OpenSearch Service environment.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDirectQueryDataSource(
        dataSourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDirectQueryDataSourceResponse {
        let input = GetDirectQueryDataSourceRequest(
            dataSourceName: dataSourceName
        )
        return try await self.getDirectQueryDataSource(input, logger: logger)
    }

    /// The status of the maintenance action.
    @Sendable
    @inlinable
    public func getDomainMaintenanceStatus(_ input: GetDomainMaintenanceStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDomainMaintenanceStatusResponse {
        try await self.client.execute(
            operation: "GetDomainMaintenanceStatus", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/domainMaintenance", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// The status of the maintenance action.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - maintenanceId: The request ID of the maintenance action.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomainMaintenanceStatus(
        domainName: String,
        maintenanceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDomainMaintenanceStatusResponse {
        let input = GetDomainMaintenanceStatusRequest(
            domainName: domainName, 
            maintenanceId: maintenanceId
        )
        return try await self.getDomainMaintenanceStatus(input, logger: logger)
    }

    /// Returns a list of Amazon OpenSearch Service package versions, along with their creation time, commit message, and plugin properties (if the  package is a zip plugin package). For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func getPackageVersionHistory(_ input: GetPackageVersionHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPackageVersionHistoryResponse {
        try await self.client.execute(
            operation: "GetPackageVersionHistory", 
            path: "/2021-01-01/packages/{PackageID}/history", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of Amazon OpenSearch Service package versions, along with their creation time, commit message, and plugin properties (if the  package is a zip plugin package). For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial GetPackageVersionHistory operation returns a nextToken, you can include the returned nextToken in subsequent GetPackageVersionHistory operations, which returns results in the next page.
    ///   - packageID: The unique identifier of the package.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPackageVersionHistory(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPackageVersionHistoryResponse {
        let input = GetPackageVersionHistoryRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            packageID: packageID
        )
        return try await self.getPackageVersionHistory(input, logger: logger)
    }

    /// Retrieves the complete history of the last 10 upgrades performed on an Amazon OpenSearch Service domain.
    @Sendable
    @inlinable
    public func getUpgradeHistory(_ input: GetUpgradeHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetUpgradeHistoryResponse {
        try await self.client.execute(
            operation: "GetUpgradeHistory", 
            path: "/2021-01-01/opensearch/upgradeDomain/{DomainName}/history", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the complete history of the last 10 upgrades performed on an Amazon OpenSearch Service domain.
    ///
    /// Parameters:
    ///   - domainName: The name of an existing domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial GetUpgradeHistory operation returns a nextToken, you can include the returned nextToken in subsequent GetUpgradeHistory operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUpgradeHistory(
        domainName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetUpgradeHistoryResponse {
        let input = GetUpgradeHistoryRequest(
            domainName: domainName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.getUpgradeHistory(input, logger: logger)
    }

    /// Returns the most recent status of the last upgrade or upgrade eligibility check performed on an Amazon OpenSearch Service domain.
    @Sendable
    @inlinable
    public func getUpgradeStatus(_ input: GetUpgradeStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetUpgradeStatusResponse {
        try await self.client.execute(
            operation: "GetUpgradeStatus", 
            path: "/2021-01-01/opensearch/upgradeDomain/{DomainName}/status", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the most recent status of the last upgrade or upgrade eligibility check performed on an Amazon OpenSearch Service domain.
    ///
    /// Parameters:
    ///   - domainName: The domain of the domain to get upgrade status information for.
    ///   - logger: Logger use during operation
    @inlinable
    public func getUpgradeStatus(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetUpgradeStatusResponse {
        let input = GetUpgradeStatusRequest(
            domainName: domainName
        )
        return try await self.getUpgradeStatus(input, logger: logger)
    }

    /// Lists all OpenSearch applications under your account.
    @Sendable
    @inlinable
    public func listApplications(_ input: ListApplicationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationsResponse {
        try await self.client.execute(
            operation: "ListApplications", 
            path: "/2021-01-01/opensearch/list-applications", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all OpenSearch applications under your account.
    ///
    /// Parameters:
    ///   - maxResults: 
    ///   - nextToken: 
    ///   - statuses: Filters the list of OpenSearch applications by status. Possible values: CREATING, UPDATING, DELETING, FAILED, ACTIVE, and DELETED.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplications(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        statuses: [ApplicationStatus]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationsResponse {
        let input = ListApplicationsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            statuses: statuses
        )
        return try await self.listApplications(input, logger: logger)
    }

    /// Lists direct-query data sources for a specific domain. For more information, see  For more information, see Working with Amazon OpenSearch Service direct queries with Amazon S3.
    @Sendable
    @inlinable
    public func listDataSources(_ input: ListDataSourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDataSourcesResponse {
        try await self.client.execute(
            operation: "ListDataSources", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dataSource", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists direct-query data sources for a specific domain. For more information, see  For more information, see Working with Amazon OpenSearch Service direct queries with Amazon S3.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDataSources(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDataSourcesResponse {
        let input = ListDataSourcesRequest(
            domainName: domainName
        )
        return try await self.listDataSources(input, logger: logger)
    }

    ///  Lists an inventory of all the direct query data sources that you have configured within Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func listDirectQueryDataSources(_ input: ListDirectQueryDataSourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDirectQueryDataSourcesResponse {
        try await self.client.execute(
            operation: "ListDirectQueryDataSources", 
            path: "/2021-01-01/opensearch/directQueryDataSource", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Lists an inventory of all the direct query data sources that you have configured within Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - nextToken: 
    ///   - logger: Logger use during operation
    @inlinable
    public func listDirectQueryDataSources(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDirectQueryDataSourcesResponse {
        let input = ListDirectQueryDataSourcesRequest(
            nextToken: nextToken
        )
        return try await self.listDirectQueryDataSources(input, logger: logger)
    }

    /// A list of maintenance actions for the domain.
    @Sendable
    @inlinable
    public func listDomainMaintenances(_ input: ListDomainMaintenancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDomainMaintenancesResponse {
        try await self.client.execute(
            operation: "ListDomainMaintenances", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/domainMaintenances", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A list of maintenance actions for the domain.
    ///
    /// Parameters:
    ///   - action: The name of the action.
    ///   - domainName: The name of the domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListDomainMaintenances operation returns a nextToken, include the returned nextToken in subsequent ListDomainMaintenances operations, which returns results in the next page.
    ///   - status: The status of the action.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDomainMaintenances(
        action: MaintenanceType? = nil,
        domainName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        status: MaintenanceStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDomainMaintenancesResponse {
        let input = ListDomainMaintenancesRequest(
            action: action, 
            domainName: domainName, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            status: status
        )
        return try await self.listDomainMaintenances(input, logger: logger)
    }

    /// Returns the names of all Amazon OpenSearch Service domains owned by the current user in the active Region.
    @Sendable
    @inlinable
    public func listDomainNames(_ input: ListDomainNamesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDomainNamesResponse {
        try await self.client.execute(
            operation: "ListDomainNames", 
            path: "/2021-01-01/domain", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the names of all Amazon OpenSearch Service domains owned by the current user in the active Region.
    ///
    /// Parameters:
    ///   - engineType: Filters the output by domain engine type.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDomainNames(
        engineType: EngineType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDomainNamesResponse {
        let input = ListDomainNamesRequest(
            engineType: engineType
        )
        return try await self.listDomainNames(input, logger: logger)
    }

    /// Lists all Amazon OpenSearch Service domains associated with a given package. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func listDomainsForPackage(_ input: ListDomainsForPackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDomainsForPackageResponse {
        try await self.client.execute(
            operation: "ListDomainsForPackage", 
            path: "/2021-01-01/packages/{PackageID}/domains", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all Amazon OpenSearch Service domains associated with a given package. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListDomainsForPackage operation returns a nextToken, you can include the returned nextToken in subsequent ListDomainsForPackage operations, which returns results in the next page.
    ///   - packageID: The unique identifier of the package for which to list associated domains.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDomainsForPackage(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDomainsForPackageResponse {
        let input = ListDomainsForPackageRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            packageID: packageID
        )
        return try await self.listDomainsForPackage(input, logger: logger)
    }

    /// Lists all instance types and available features for a given OpenSearch or Elasticsearch version.
    @Sendable
    @inlinable
    public func listInstanceTypeDetails(_ input: ListInstanceTypeDetailsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInstanceTypeDetailsResponse {
        try await self.client.execute(
            operation: "ListInstanceTypeDetails", 
            path: "/2021-01-01/opensearch/instanceTypeDetails/{EngineVersion}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all instance types and available features for a given OpenSearch or Elasticsearch version.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - engineVersion: The version of OpenSearch or Elasticsearch, in the format Elasticsearch_X.Y or OpenSearch_X.Y. Defaults to the latest version of OpenSearch.
    ///   - instanceType: An optional parameter that lists information for a given instance type.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListInstanceTypeDetails operation returns a nextToken, you can include the returned nextToken in subsequent ListInstanceTypeDetails operations, which returns results in the next page.
    ///   - retrieveAZs: An optional parameter that specifies the Availability Zones for the domain.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInstanceTypeDetails(
        domainName: String? = nil,
        engineVersion: String,
        instanceType: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        retrieveAZs: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInstanceTypeDetailsResponse {
        let input = ListInstanceTypeDetailsRequest(
            domainName: domainName, 
            engineVersion: engineVersion, 
            instanceType: instanceType, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            retrieveAZs: retrieveAZs
        )
        return try await self.listInstanceTypeDetails(input, logger: logger)
    }

    /// Lists all packages associated with an Amazon OpenSearch Service domain. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func listPackagesForDomain(_ input: ListPackagesForDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPackagesForDomainResponse {
        try await self.client.execute(
            operation: "ListPackagesForDomain", 
            path: "/2021-01-01/domain/{DomainName}/packages", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all packages associated with an Amazon OpenSearch Service domain. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain for which you want to list associated packages.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListPackagesForDomain operation returns a nextToken, you can include the returned nextToken in subsequent ListPackagesForDomain operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPackagesForDomain(
        domainName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPackagesForDomainResponse {
        let input = ListPackagesForDomainRequest(
            domainName: domainName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPackagesForDomain(input, logger: logger)
    }

    /// Retrieves a list of configuration changes that are scheduled for a domain. These changes can be service software updates or blue/green Auto-Tune enhancements.
    @Sendable
    @inlinable
    public func listScheduledActions(_ input: ListScheduledActionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListScheduledActionsResponse {
        try await self.client.execute(
            operation: "ListScheduledActions", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/scheduledActions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of configuration changes that are scheduled for a domain. These changes can be service software updates or blue/green Auto-Tune enhancements.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListScheduledActions operation returns a nextToken, you can include the returned nextToken in subsequent ListScheduledActions operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listScheduledActions(
        domainName: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListScheduledActionsResponse {
        let input = ListScheduledActionsRequest(
            domainName: domainName, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listScheduledActions(input, logger: logger)
    }

    /// Returns all resource tags for an Amazon OpenSearch Service domain, data source, or application. For more information, see Tagging Amazon OpenSearch Service resources.
    @Sendable
    @inlinable
    public func listTags(_ input: ListTagsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsResponse {
        try await self.client.execute(
            operation: "ListTags", 
            path: "/2021-01-01/tags", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all resource tags for an Amazon OpenSearch Service domain, data source, or application. For more information, see Tagging Amazon OpenSearch Service resources.
    ///
    /// Parameters:
    ///   - arn: Amazon Resource Name (ARN) for the domain, data source, or application to view tags for.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTags(
        arn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsResponse {
        let input = ListTagsRequest(
            arn: arn
        )
        return try await self.listTags(input, logger: logger)
    }

    /// Lists all versions of OpenSearch and Elasticsearch that Amazon OpenSearch Service supports.
    @Sendable
    @inlinable
    public func listVersions(_ input: ListVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListVersionsResponse {
        try await self.client.execute(
            operation: "ListVersions", 
            path: "/2021-01-01/opensearch/versions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all versions of OpenSearch and Elasticsearch that Amazon OpenSearch Service supports.
    ///
    /// Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - nextToken: If your initial ListVersions operation returns a nextToken, you can include the returned nextToken in subsequent ListVersions operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listVersions(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListVersionsResponse {
        let input = ListVersionsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listVersions(input, logger: logger)
    }

    /// Retrieves information about each Amazon Web Services principal that is allowed to access a given Amazon OpenSearch Service domain through the use of an interface VPC endpoint.
    @Sendable
    @inlinable
    public func listVpcEndpointAccess(_ input: ListVpcEndpointAccessRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListVpcEndpointAccessResponse {
        try await self.client.execute(
            operation: "ListVpcEndpointAccess", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/listVpcEndpointAccess", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about each Amazon Web Services principal that is allowed to access a given Amazon OpenSearch Service domain through the use of an interface VPC endpoint.
    ///
    /// Parameters:
    ///   - domainName: The name of the OpenSearch Service domain to retrieve access information for.
    ///   - nextToken: If your initial ListVpcEndpointAccess operation returns a nextToken, you can include the returned nextToken in subsequent ListVpcEndpointAccess operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listVpcEndpointAccess(
        domainName: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListVpcEndpointAccessResponse {
        let input = ListVpcEndpointAccessRequest(
            domainName: domainName, 
            nextToken: nextToken
        )
        return try await self.listVpcEndpointAccess(input, logger: logger)
    }

    /// Retrieves all Amazon OpenSearch Service-managed VPC endpoints in the current Amazon Web Services account and Region.
    @Sendable
    @inlinable
    public func listVpcEndpoints(_ input: ListVpcEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListVpcEndpointsResponse {
        try await self.client.execute(
            operation: "ListVpcEndpoints", 
            path: "/2021-01-01/opensearch/vpcEndpoints", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves all Amazon OpenSearch Service-managed VPC endpoints in the current Amazon Web Services account and Region.
    ///
    /// Parameters:
    ///   - nextToken: If your initial ListVpcEndpoints operation returns a nextToken, you can include the returned nextToken in subsequent ListVpcEndpoints operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listVpcEndpoints(
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListVpcEndpointsResponse {
        let input = ListVpcEndpointsRequest(
            nextToken: nextToken
        )
        return try await self.listVpcEndpoints(input, logger: logger)
    }

    /// Retrieves all Amazon OpenSearch Service-managed VPC endpoints associated with a particular domain.
    @Sendable
    @inlinable
    public func listVpcEndpointsForDomain(_ input: ListVpcEndpointsForDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListVpcEndpointsForDomainResponse {
        try await self.client.execute(
            operation: "ListVpcEndpointsForDomain", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/vpcEndpoints", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves all Amazon OpenSearch Service-managed VPC endpoints associated with a particular domain.
    ///
    /// Parameters:
    ///   - domainName: The name of the domain to list associated VPC endpoints for.
    ///   - nextToken: If your initial ListEndpointsForDomain operation returns a nextToken, you can include the returned nextToken in subsequent ListEndpointsForDomain operations, which returns results in the next page.
    ///   - logger: Logger use during operation
    @inlinable
    public func listVpcEndpointsForDomain(
        domainName: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListVpcEndpointsForDomainResponse {
        let input = ListVpcEndpointsForDomainRequest(
            domainName: domainName, 
            nextToken: nextToken
        )
        return try await self.listVpcEndpointsForDomain(input, logger: logger)
    }

    /// Allows you to purchase Amazon OpenSearch Service Reserved Instances.
    @Sendable
    @inlinable
    public func purchaseReservedInstanceOffering(_ input: PurchaseReservedInstanceOfferingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PurchaseReservedInstanceOfferingResponse {
        try await self.client.execute(
            operation: "PurchaseReservedInstanceOffering", 
            path: "/2021-01-01/opensearch/purchaseReservedInstanceOffering", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows you to purchase Amazon OpenSearch Service Reserved Instances.
    ///
    /// Parameters:
    ///   - instanceCount: The number of OpenSearch instances to reserve.
    ///   - reservationName: A customer-specified identifier to track this reservation.
    ///   - reservedInstanceOfferingId: The ID of the Reserved Instance offering to purchase.
    ///   - logger: Logger use during operation
    @inlinable
    public func purchaseReservedInstanceOffering(
        instanceCount: Int? = nil,
        reservationName: String,
        reservedInstanceOfferingId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PurchaseReservedInstanceOfferingResponse {
        let input = PurchaseReservedInstanceOfferingRequest(
            instanceCount: instanceCount, 
            reservationName: reservationName, 
            reservedInstanceOfferingId: reservedInstanceOfferingId
        )
        return try await self.purchaseReservedInstanceOffering(input, logger: logger)
    }

    /// Allows the remote Amazon OpenSearch Service domain owner to reject an inbound cross-cluster connection request.
    @Sendable
    @inlinable
    public func rejectInboundConnection(_ input: RejectInboundConnectionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RejectInboundConnectionResponse {
        try await self.client.execute(
            operation: "RejectInboundConnection", 
            path: "/2021-01-01/opensearch/cc/inboundConnection/{ConnectionId}/reject", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the remote Amazon OpenSearch Service domain owner to reject an inbound cross-cluster connection request.
    ///
    /// Parameters:
    ///   - connectionId: The unique identifier of the inbound connection to reject.
    ///   - logger: Logger use during operation
    @inlinable
    public func rejectInboundConnection(
        connectionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RejectInboundConnectionResponse {
        let input = RejectInboundConnectionRequest(
            connectionId: connectionId
        )
        return try await self.rejectInboundConnection(input, logger: logger)
    }

    /// Removes the specified set of tags from an Amazon OpenSearch Service domain, data source, or application. For more information, see  Tagging Amazon OpenSearch Service resources.
    @Sendable
    @inlinable
    public func removeTags(_ input: RemoveTagsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RemoveTags", 
            path: "/2021-01-01/tags-removal", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the specified set of tags from an Amazon OpenSearch Service domain, data source, or application. For more information, see  Tagging Amazon OpenSearch Service resources.
    ///
    /// Parameters:
    ///   - arn: The Amazon Resource Name (ARN) of the domain, data source, or application from which you want to delete the specified tags.
    ///   - tagKeys: The list of tag keys to remove from the domain, data source, or application.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeTags(
        arn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RemoveTagsRequest(
            arn: arn, 
            tagKeys: tagKeys
        )
        return try await self.removeTags(input, logger: logger)
    }

    /// Revokes access to an Amazon OpenSearch Service domain that was provided through an interface VPC endpoint.
    @Sendable
    @inlinable
    public func revokeVpcEndpointAccess(_ input: RevokeVpcEndpointAccessRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RevokeVpcEndpointAccessResponse {
        try await self.client.execute(
            operation: "RevokeVpcEndpointAccess", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/revokeVpcEndpointAccess", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Revokes access to an Amazon OpenSearch Service domain that was provided through an interface VPC endpoint.
    ///
    /// Parameters:
    ///   - account: The account ID to revoke access from.
    ///   - domainName: The name of the OpenSearch Service domain.
    ///   - service: The service SP to revoke access from.
    ///   - logger: Logger use during operation
    @inlinable
    public func revokeVpcEndpointAccess(
        account: String? = nil,
        domainName: String,
        service: AWSServicePrincipal? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RevokeVpcEndpointAccessResponse {
        let input = RevokeVpcEndpointAccessRequest(
            account: account, 
            domainName: domainName, 
            service: service
        )
        return try await self.revokeVpcEndpointAccess(input, logger: logger)
    }

    /// Starts the node maintenance process on the data node. These processes can include a node reboot, an Opensearch or Elasticsearch process restart, or a Dashboard or Kibana restart.
    @Sendable
    @inlinable
    public func startDomainMaintenance(_ input: StartDomainMaintenanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDomainMaintenanceResponse {
        try await self.client.execute(
            operation: "StartDomainMaintenance", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/domainMaintenance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the node maintenance process on the data node. These processes can include a node reboot, an Opensearch or Elasticsearch process restart, or a Dashboard or Kibana restart.
    ///
    /// Parameters:
    ///   - action: The name of the action.
    ///   - domainName: The name of the domain.
    ///   - nodeId: The ID of the data node.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDomainMaintenance(
        action: MaintenanceType,
        domainName: String,
        nodeId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDomainMaintenanceResponse {
        let input = StartDomainMaintenanceRequest(
            action: action, 
            domainName: domainName, 
            nodeId: nodeId
        )
        return try await self.startDomainMaintenance(input, logger: logger)
    }

    /// Schedules a service software update for an Amazon OpenSearch Service domain. For more information, see Service software updates in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func startServiceSoftwareUpdate(_ input: StartServiceSoftwareUpdateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartServiceSoftwareUpdateResponse {
        try await self.client.execute(
            operation: "StartServiceSoftwareUpdate", 
            path: "/2021-01-01/opensearch/serviceSoftwareUpdate/start", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Schedules a service software update for an Amazon OpenSearch Service domain. For more information, see Service software updates in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - desiredStartTime: The Epoch timestamp when you want the service software update to start. You only need to specify this parameter if you set ScheduleAt to TIMESTAMP.
    ///   - domainName: The name of the domain that you want to update to the latest service software.
    ///   - scheduleAt: When to start the service software update.    NOW - Immediately schedules the update to happen in the current hour if there's capacity available.    TIMESTAMP - Lets you specify a custom date and time to apply the update. If you specify this value, you must also provide a value for DesiredStartTime.    OFF_PEAK_WINDOW - Marks the update to be picked up during an upcoming off-peak window. There's no guarantee that the update will happen during the next immediate window. Depending on capacity, it might happen in subsequent days.   Default: NOW if you don't specify a value for DesiredStartTime, and TIMESTAMP if you do.
    ///   - logger: Logger use during operation
    @inlinable
    public func startServiceSoftwareUpdate(
        desiredStartTime: Int64? = nil,
        domainName: String,
        scheduleAt: ScheduleAt? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartServiceSoftwareUpdateResponse {
        let input = StartServiceSoftwareUpdateRequest(
            desiredStartTime: desiredStartTime, 
            domainName: domainName, 
            scheduleAt: scheduleAt
        )
        return try await self.startServiceSoftwareUpdate(input, logger: logger)
    }

    /// Updates the configuration and settings of an existing OpenSearch application.
    @Sendable
    @inlinable
    public func updateApplication(_ input: UpdateApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateApplicationResponse {
        try await self.client.execute(
            operation: "UpdateApplication", 
            path: "/2021-01-01/opensearch/application/{id}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration and settings of an existing OpenSearch application.
    ///
    /// Parameters:
    ///   - appConfigs: The configuration settings to modify for the OpenSearch application.
    ///   - dataSources: The data sources to associate with the OpenSearch application.
    ///   - id: The unique identifier for the OpenSearch application to be updated.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateApplication(
        appConfigs: [AppConfig]? = nil,
        dataSources: [DataSource]? = nil,
        id: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateApplicationResponse {
        let input = UpdateApplicationRequest(
            appConfigs: appConfigs, 
            dataSources: dataSources, 
            id: id
        )
        return try await self.updateApplication(input, logger: logger)
    }

    /// Updates a direct-query data source. For more information, see Working with Amazon OpenSearch Service data source integrations with Amazon S3.
    @Sendable
    @inlinable
    public func updateDataSource(_ input: UpdateDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDataSourceResponse {
        try await self.client.execute(
            operation: "UpdateDataSource", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/dataSource/{Name}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a direct-query data source. For more information, see Working with Amazon OpenSearch Service data source integrations with Amazon S3.
    ///
    /// Parameters:
    ///   - dataSourceType: The type of data source.
    ///   - description: A new description of the data source.
    ///   - domainName: The name of the domain.
    ///   - name: The name of the data source to modify.
    ///   - status: The status of the data source update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDataSource(
        dataSourceType: DataSourceType,
        description: String? = nil,
        domainName: String,
        name: String,
        status: DataSourceStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDataSourceResponse {
        let input = UpdateDataSourceRequest(
            dataSourceType: dataSourceType, 
            description: description, 
            domainName: domainName, 
            name: name, 
            status: status
        )
        return try await self.updateDataSource(input, logger: logger)
    }

    ///  Updates the configuration or properties of an existing direct query data source in Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func updateDirectQueryDataSource(_ input: UpdateDirectQueryDataSourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDirectQueryDataSourceResponse {
        try await self.client.execute(
            operation: "UpdateDirectQueryDataSource", 
            path: "/2021-01-01/opensearch/directQueryDataSource/{DataSourceName}", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  Updates the configuration or properties of an existing direct query data source in Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - dataSourceName:  A unique, user-defined label to identify the data  source within your OpenSearch Service environment.
    ///   - dataSourceType:  The supported Amazon Web Services service that you want to use as the source for  direct queries in OpenSearch Service.
    ///   - description:  An optional text field for providing additional context and  details about the data source.
    ///   - openSearchArns:  A list of Amazon Resource Names (ARNs) for the OpenSearch  collections that are associated with the direct query data source.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDirectQueryDataSource(
        dataSourceName: String,
        dataSourceType: DirectQueryDataSourceType,
        description: String? = nil,
        openSearchArns: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDirectQueryDataSourceResponse {
        let input = UpdateDirectQueryDataSourceRequest(
            dataSourceName: dataSourceName, 
            dataSourceType: dataSourceType, 
            description: description, 
            openSearchArns: openSearchArns
        )
        return try await self.updateDirectQueryDataSource(input, logger: logger)
    }

    /// Modifies the cluster configuration of the specified Amazon OpenSearch Service domain.
    @Sendable
    @inlinable
    public func updateDomainConfig(_ input: UpdateDomainConfigRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDomainConfigResponse {
        try await self.client.execute(
            operation: "UpdateDomainConfig", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/config", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies the cluster configuration of the specified Amazon OpenSearch Service domain.
    ///
    /// Parameters:
    ///   - accessPolicies: Identity and Access Management (IAM) access policy as a JSON-formatted string.
    ///   - advancedOptions: Key-value pairs to specify advanced configuration options. The following key-value pairs are supported:    "rest.action.multi.allow_explicit_index": "true" | "false" - Note the use of a string rather than a boolean. Specifies whether explicit references to indexes are allowed inside the body of HTTP requests. If you want to configure access policies for domain sub-resources, such as specific indexes and domain APIs, you must disable this property. Default is true.    "indices.fielddata.cache.size": "80"  - Note the use of a string rather than a boolean. Specifies the percentage of heap space allocated to field data. Default is unbounded.    "indices.query.bool.max_clause_count": "1024" - Note the use of a string rather than a boolean. Specifies the maximum number of clauses allowed in a Lucene boolean query. Default is 1,024. Queries with more than the permitted number of clauses result in a TooManyClauses error.   For more information, see Advanced cluster parameters.
    ///   - advancedSecurityOptions: Options for fine-grained access control.
    ///   - aimlOptions: Options for all machine learning features for the specified domain.
    ///   - autoTuneOptions: Options for Auto-Tune.
    ///   - clusterConfig: Changes that you want to make to the cluster configuration, such as the instance type and number of EC2 instances.
    ///   - cognitoOptions: Key-value pairs to configure Amazon Cognito authentication for OpenSearch Dashboards.
    ///   - domainEndpointOptions: Additional options for the domain endpoint, such as whether to require HTTPS for all traffic.
    ///   - domainName: The name of the domain that you're updating.
    ///   - dryRun: This flag, when set to True, specifies whether the UpdateDomain request should return the results of a dry run analysis without actually applying the change. A dry run determines what type of deployment the update will cause.
    ///   - dryRunMode: The type of dry run to perform.    Basic only returns the type of deployment (blue/green or dynamic) that the update will cause.    Verbose runs an additional check to validate the changes you're making. For more information, see Validating a domain update.
    ///   - ebsOptions: The type and size of the EBS volume to attach to instances in the domain.
    ///   - encryptionAtRestOptions: Encryption at rest options for the domain.
    ///   - identityCenterOptions: 
    ///   - ipAddressType: Specify either dual stack or IPv4 as your IP address type. Dual stack allows you to share domain resources across IPv4 and IPv6 address types, and is the recommended option.  If your IP address type is currently set to dual stack, you can't change it.
    ///   - logPublishingOptions: Options to publish OpenSearch logs to Amazon CloudWatch Logs.
    ///   - nodeToNodeEncryptionOptions: Node-to-node encryption options for the domain.
    ///   - offPeakWindowOptions: Off-peak window options for the domain.
    ///   - snapshotOptions: Option to set the time, in UTC format, for the daily automated snapshot. Default value is 0 hours.
    ///   - softwareUpdateOptions: Service software update options for the domain.
    ///   - vpcOptions: Options to specify the subnets and security groups for a VPC endpoint. For more information, see Launching your Amazon OpenSearch Service domains using a VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDomainConfig(
        accessPolicies: String? = nil,
        advancedOptions: [String: String]? = nil,
        advancedSecurityOptions: AdvancedSecurityOptionsInput? = nil,
        aimlOptions: AIMLOptionsInput? = nil,
        autoTuneOptions: AutoTuneOptions? = nil,
        clusterConfig: ClusterConfig? = nil,
        cognitoOptions: CognitoOptions? = nil,
        domainEndpointOptions: DomainEndpointOptions? = nil,
        domainName: String,
        dryRun: Bool? = nil,
        dryRunMode: DryRunMode? = nil,
        ebsOptions: EBSOptions? = nil,
        encryptionAtRestOptions: EncryptionAtRestOptions? = nil,
        identityCenterOptions: IdentityCenterOptionsInput? = nil,
        ipAddressType: IPAddressType? = nil,
        logPublishingOptions: [LogType: LogPublishingOption]? = nil,
        nodeToNodeEncryptionOptions: NodeToNodeEncryptionOptions? = nil,
        offPeakWindowOptions: OffPeakWindowOptions? = nil,
        snapshotOptions: SnapshotOptions? = nil,
        softwareUpdateOptions: SoftwareUpdateOptions? = nil,
        vpcOptions: VPCOptions? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDomainConfigResponse {
        let input = UpdateDomainConfigRequest(
            accessPolicies: accessPolicies, 
            advancedOptions: advancedOptions, 
            advancedSecurityOptions: advancedSecurityOptions, 
            aimlOptions: aimlOptions, 
            autoTuneOptions: autoTuneOptions, 
            clusterConfig: clusterConfig, 
            cognitoOptions: cognitoOptions, 
            domainEndpointOptions: domainEndpointOptions, 
            domainName: domainName, 
            dryRun: dryRun, 
            dryRunMode: dryRunMode, 
            ebsOptions: ebsOptions, 
            encryptionAtRestOptions: encryptionAtRestOptions, 
            identityCenterOptions: identityCenterOptions, 
            ipAddressType: ipAddressType, 
            logPublishingOptions: logPublishingOptions, 
            nodeToNodeEncryptionOptions: nodeToNodeEncryptionOptions, 
            offPeakWindowOptions: offPeakWindowOptions, 
            snapshotOptions: snapshotOptions, 
            softwareUpdateOptions: softwareUpdateOptions, 
            vpcOptions: vpcOptions
        )
        return try await self.updateDomainConfig(input, logger: logger)
    }

    /// Updates a package for use with Amazon OpenSearch Service domains. For more information, see Custom packages for Amazon OpenSearch Service.
    @Sendable
    @inlinable
    public func updatePackage(_ input: UpdatePackageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePackageResponse {
        try await self.client.execute(
            operation: "UpdatePackage", 
            path: "/2021-01-01/packages/update", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a package for use with Amazon OpenSearch Service domains. For more information, see Custom packages for Amazon OpenSearch Service.
    ///
    /// Parameters:
    ///   - commitMessage: Commit message for the updated file, which is shown as part of GetPackageVersionHistoryResponse.
    ///   - packageConfiguration: The updated configuration details for a package.
    ///   - packageDescription: A new description of the package.
    ///   - packageEncryptionOptions: Encryption options for a package.
    ///   - packageID: The unique identifier for the package.
    ///   - packageSource: Amazon S3 bucket and key for the package.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePackage(
        commitMessage: String? = nil,
        packageConfiguration: PackageConfiguration? = nil,
        packageDescription: String? = nil,
        packageEncryptionOptions: PackageEncryptionOptions? = nil,
        packageID: String,
        packageSource: PackageSource,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePackageResponse {
        let input = UpdatePackageRequest(
            commitMessage: commitMessage, 
            packageConfiguration: packageConfiguration, 
            packageDescription: packageDescription, 
            packageEncryptionOptions: packageEncryptionOptions, 
            packageID: packageID, 
            packageSource: packageSource
        )
        return try await self.updatePackage(input, logger: logger)
    }

    /// Updates the scope of a package. Scope of the package defines users who can view and associate a package.
    @Sendable
    @inlinable
    public func updatePackageScope(_ input: UpdatePackageScopeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePackageScopeResponse {
        try await self.client.execute(
            operation: "UpdatePackageScope", 
            path: "/2021-01-01/packages/updateScope", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the scope of a package. Scope of the package defines users who can view and associate a package.
    ///
    /// Parameters:
    ///   - operation:  The operation to perform on the package scope (e.g., add/remove/override users).
    ///   - packageID: ID of the package whose scope is being updated.
    ///   - packageUserList:  List of users to be added or removed from the package scope.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePackageScope(
        operation: PackageScopeOperationEnum,
        packageID: String,
        packageUserList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePackageScopeResponse {
        let input = UpdatePackageScopeRequest(
            operation: operation, 
            packageID: packageID, 
            packageUserList: packageUserList
        )
        return try await self.updatePackageScope(input, logger: logger)
    }

    /// Reschedules a planned domain configuration change for a later time. This change can be a scheduled service software update or a blue/green Auto-Tune enhancement.
    @Sendable
    @inlinable
    public func updateScheduledAction(_ input: UpdateScheduledActionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateScheduledActionResponse {
        try await self.client.execute(
            operation: "UpdateScheduledAction", 
            path: "/2021-01-01/opensearch/domain/{DomainName}/scheduledAction/update", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Reschedules a planned domain configuration change for a later time. This change can be a scheduled service software update or a blue/green Auto-Tune enhancement.
    ///
    /// Parameters:
    ///   - actionID: The unique identifier of the action to reschedule. To retrieve this ID, send a ListScheduledActions request.
    ///   - actionType: The type of action to reschedule. Can be one of SERVICE_SOFTWARE_UPDATE, JVM_HEAP_SIZE_TUNING, or JVM_YOUNG_GEN_TUNING. To retrieve this value, send a ListScheduledActions request.
    ///   - desiredStartTime: The time to implement the change, in Coordinated Universal Time (UTC). Only specify this parameter if you set ScheduleAt to TIMESTAMP.
    ///   - domainName: The name of the domain to reschedule an action for.
    ///   - scheduleAt: When to schedule the action.    NOW - Immediately schedules the update to happen in the current hour if there's capacity available.    TIMESTAMP - Lets you specify a custom date and time to apply the update. If you specify this value, you must also provide a value for DesiredStartTime.    OFF_PEAK_WINDOW - Marks the action to be picked up during an upcoming off-peak window. There's no guarantee that the change will be implemented during the next immediate window. Depending on capacity, it might happen in subsequent days.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateScheduledAction(
        actionID: String,
        actionType: ActionType,
        desiredStartTime: Int64? = nil,
        domainName: String,
        scheduleAt: ScheduleAt,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateScheduledActionResponse {
        let input = UpdateScheduledActionRequest(
            actionID: actionID, 
            actionType: actionType, 
            desiredStartTime: desiredStartTime, 
            domainName: domainName, 
            scheduleAt: scheduleAt
        )
        return try await self.updateScheduledAction(input, logger: logger)
    }

    /// Modifies an Amazon OpenSearch Service-managed interface VPC endpoint.
    @Sendable
    @inlinable
    public func updateVpcEndpoint(_ input: UpdateVpcEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateVpcEndpointResponse {
        try await self.client.execute(
            operation: "UpdateVpcEndpoint", 
            path: "/2021-01-01/opensearch/vpcEndpoints/update", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies an Amazon OpenSearch Service-managed interface VPC endpoint.
    ///
    /// Parameters:
    ///   - vpcEndpointId: The unique identifier of the endpoint.
    ///   - vpcOptions: The security groups and/or subnets to add, remove, or modify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateVpcEndpoint(
        vpcEndpointId: String,
        vpcOptions: VPCOptions,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateVpcEndpointResponse {
        let input = UpdateVpcEndpointRequest(
            vpcEndpointId: vpcEndpointId, 
            vpcOptions: vpcOptions
        )
        return try await self.updateVpcEndpoint(input, logger: logger)
    }

    /// Allows you to either upgrade your Amazon OpenSearch Service domain or perform an upgrade eligibility check to a compatible version of OpenSearch or Elasticsearch.
    @Sendable
    @inlinable
    public func upgradeDomain(_ input: UpgradeDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpgradeDomainResponse {
        try await self.client.execute(
            operation: "UpgradeDomain", 
            path: "/2021-01-01/opensearch/upgradeDomain", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows you to either upgrade your Amazon OpenSearch Service domain or perform an upgrade eligibility check to a compatible version of OpenSearch or Elasticsearch.
    ///
    /// Parameters:
    ///   - advancedOptions: Only supports the override_main_response_version parameter and not other advanced options. You can only include this option when upgrading to an OpenSearch version. Specifies whether the domain reports its version as 7.10 so that it continues to work with Elasticsearch OSS clients and plugins.
    ///   - domainName: Name of the OpenSearch Service domain that you want to upgrade.
    ///   - performCheckOnly: When true, indicates that an upgrade eligibility check needs to be performed. Does not actually perform the upgrade.
    ///   - targetVersion: OpenSearch or Elasticsearch version to which you want to upgrade, in the format Opensearch_X.Y or Elasticsearch_X.Y.
    ///   - logger: Logger use during operation
    @inlinable
    public func upgradeDomain(
        advancedOptions: [String: String]? = nil,
        domainName: String,
        performCheckOnly: Bool? = nil,
        targetVersion: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpgradeDomainResponse {
        let input = UpgradeDomainRequest(
            advancedOptions: advancedOptions, 
            domainName: domainName, 
            performCheckOnly: performCheckOnly, 
            targetVersion: targetVersion
        )
        return try await self.upgradeDomain(input, logger: logger)
    }
}

extension OpenSearch {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: OpenSearch, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension OpenSearch {
    /// Return PaginatorSequence for operation ``describeDomainAutoTunes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDomainAutoTunesPaginator(
        _ input: DescribeDomainAutoTunesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeDomainAutoTunesRequest, DescribeDomainAutoTunesResponse> {
        return .init(
            input: input,
            command: self.describeDomainAutoTunes,
            inputKey: \DescribeDomainAutoTunesRequest.nextToken,
            outputKey: \DescribeDomainAutoTunesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeDomainAutoTunes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: Name of the domain that you want Auto-Tune details about.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDomainAutoTunesPaginator(
        domainName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeDomainAutoTunesRequest, DescribeDomainAutoTunesResponse> {
        let input = DescribeDomainAutoTunesRequest(
            domainName: domainName, 
            maxResults: maxResults
        )
        return self.describeDomainAutoTunesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInboundConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInboundConnectionsPaginator(
        _ input: DescribeInboundConnectionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInboundConnectionsRequest, DescribeInboundConnectionsResponse> {
        return .init(
            input: input,
            command: self.describeInboundConnections,
            inputKey: \DescribeInboundConnectionsRequest.nextToken,
            outputKey: \DescribeInboundConnectionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInboundConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters:  A list of filters used to match properties for inbound cross-cluster connections.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInboundConnectionsPaginator(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInboundConnectionsRequest, DescribeInboundConnectionsResponse> {
        let input = DescribeInboundConnectionsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeInboundConnectionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeOutboundConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOutboundConnectionsPaginator(
        _ input: DescribeOutboundConnectionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeOutboundConnectionsRequest, DescribeOutboundConnectionsResponse> {
        return .init(
            input: input,
            command: self.describeOutboundConnections,
            inputKey: \DescribeOutboundConnectionsRequest.nextToken,
            outputKey: \DescribeOutboundConnectionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeOutboundConnections(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: List of filter names and values that you can use for requests.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOutboundConnectionsPaginator(
        filters: [Filter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeOutboundConnectionsRequest, DescribeOutboundConnectionsResponse> {
        let input = DescribeOutboundConnectionsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeOutboundConnectionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describePackages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describePackagesPaginator(
        _ input: DescribePackagesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribePackagesRequest, DescribePackagesResponse> {
        return .init(
            input: input,
            command: self.describePackages,
            inputKey: \DescribePackagesRequest.nextToken,
            outputKey: \DescribePackagesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describePackages(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Only returns packages that match the DescribePackagesFilterList values.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describePackagesPaginator(
        filters: [DescribePackagesFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribePackagesRequest, DescribePackagesResponse> {
        let input = DescribePackagesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describePackagesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeReservedInstanceOfferings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeReservedInstanceOfferingsPaginator(
        _ input: DescribeReservedInstanceOfferingsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeReservedInstanceOfferingsRequest, DescribeReservedInstanceOfferingsResponse> {
        return .init(
            input: input,
            command: self.describeReservedInstanceOfferings,
            inputKey: \DescribeReservedInstanceOfferingsRequest.nextToken,
            outputKey: \DescribeReservedInstanceOfferingsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeReservedInstanceOfferings(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - reservedInstanceOfferingId: The Reserved Instance identifier filter value. Use this parameter to show only the available instance types that match the specified reservation identifier.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeReservedInstanceOfferingsPaginator(
        maxResults: Int? = nil,
        reservedInstanceOfferingId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeReservedInstanceOfferingsRequest, DescribeReservedInstanceOfferingsResponse> {
        let input = DescribeReservedInstanceOfferingsRequest(
            maxResults: maxResults, 
            reservedInstanceOfferingId: reservedInstanceOfferingId
        )
        return self.describeReservedInstanceOfferingsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeReservedInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeReservedInstancesPaginator(
        _ input: DescribeReservedInstancesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeReservedInstancesRequest, DescribeReservedInstancesResponse> {
        return .init(
            input: input,
            command: self.describeReservedInstances,
            inputKey: \DescribeReservedInstancesRequest.nextToken,
            outputKey: \DescribeReservedInstancesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeReservedInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - reservedInstanceId: The reserved instance identifier filter value. Use this parameter to show only the reservation that matches the specified reserved OpenSearch instance ID.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeReservedInstancesPaginator(
        maxResults: Int? = nil,
        reservedInstanceId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeReservedInstancesRequest, DescribeReservedInstancesResponse> {
        let input = DescribeReservedInstancesRequest(
            maxResults: maxResults, 
            reservedInstanceId: reservedInstanceId
        )
        return self.describeReservedInstancesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getPackageVersionHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getPackageVersionHistoryPaginator(
        _ input: GetPackageVersionHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetPackageVersionHistoryRequest, GetPackageVersionHistoryResponse> {
        return .init(
            input: input,
            command: self.getPackageVersionHistory,
            inputKey: \GetPackageVersionHistoryRequest.nextToken,
            outputKey: \GetPackageVersionHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getPackageVersionHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - packageID: The unique identifier of the package.
    ///   - logger: Logger used for logging
    @inlinable
    public func getPackageVersionHistoryPaginator(
        maxResults: Int? = nil,
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetPackageVersionHistoryRequest, GetPackageVersionHistoryResponse> {
        let input = GetPackageVersionHistoryRequest(
            maxResults: maxResults, 
            packageID: packageID
        )
        return self.getPackageVersionHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getUpgradeHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getUpgradeHistoryPaginator(
        _ input: GetUpgradeHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetUpgradeHistoryRequest, GetUpgradeHistoryResponse> {
        return .init(
            input: input,
            command: self.getUpgradeHistory,
            inputKey: \GetUpgradeHistoryRequest.nextToken,
            outputKey: \GetUpgradeHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getUpgradeHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: The name of an existing domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func getUpgradeHistoryPaginator(
        domainName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetUpgradeHistoryRequest, GetUpgradeHistoryResponse> {
        let input = GetUpgradeHistoryRequest(
            domainName: domainName, 
            maxResults: maxResults
        )
        return self.getUpgradeHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplications(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationsPaginator(
        _ input: ListApplicationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationsRequest, ListApplicationsResponse> {
        return .init(
            input: input,
            command: self.listApplications,
            inputKey: \ListApplicationsRequest.nextToken,
            outputKey: \ListApplicationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplications(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: 
    ///   - statuses: Filters the list of OpenSearch applications by status. Possible values: CREATING, UPDATING, DELETING, FAILED, ACTIVE, and DELETED.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationsPaginator(
        maxResults: Int? = nil,
        statuses: [ApplicationStatus]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationsRequest, ListApplicationsResponse> {
        let input = ListApplicationsRequest(
            maxResults: maxResults, 
            statuses: statuses
        )
        return self.listApplicationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDomainMaintenances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainMaintenancesPaginator(
        _ input: ListDomainMaintenancesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDomainMaintenancesRequest, ListDomainMaintenancesResponse> {
        return .init(
            input: input,
            command: self.listDomainMaintenances,
            inputKey: \ListDomainMaintenancesRequest.nextToken,
            outputKey: \ListDomainMaintenancesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDomainMaintenances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - action: The name of the action.
    ///   - domainName: The name of the domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - status: The status of the action.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainMaintenancesPaginator(
        action: MaintenanceType? = nil,
        domainName: String,
        maxResults: Int? = nil,
        status: MaintenanceStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDomainMaintenancesRequest, ListDomainMaintenancesResponse> {
        let input = ListDomainMaintenancesRequest(
            action: action, 
            domainName: domainName, 
            maxResults: maxResults, 
            status: status
        )
        return self.listDomainMaintenancesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDomainsForPackage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainsForPackagePaginator(
        _ input: ListDomainsForPackageRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDomainsForPackageRequest, ListDomainsForPackageResponse> {
        return .init(
            input: input,
            command: self.listDomainsForPackage,
            inputKey: \ListDomainsForPackageRequest.nextToken,
            outputKey: \ListDomainsForPackageResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDomainsForPackage(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - packageID: The unique identifier of the package for which to list associated domains.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDomainsForPackagePaginator(
        maxResults: Int? = nil,
        packageID: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDomainsForPackageRequest, ListDomainsForPackageResponse> {
        let input = ListDomainsForPackageRequest(
            maxResults: maxResults, 
            packageID: packageID
        )
        return self.listDomainsForPackagePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInstanceTypeDetails(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInstanceTypeDetailsPaginator(
        _ input: ListInstanceTypeDetailsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInstanceTypeDetailsRequest, ListInstanceTypeDetailsResponse> {
        return .init(
            input: input,
            command: self.listInstanceTypeDetails,
            inputKey: \ListInstanceTypeDetailsRequest.nextToken,
            outputKey: \ListInstanceTypeDetailsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInstanceTypeDetails(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: The name of the domain.
    ///   - engineVersion: The version of OpenSearch or Elasticsearch, in the format Elasticsearch_X.Y or OpenSearch_X.Y. Defaults to the latest version of OpenSearch.
    ///   - instanceType: An optional parameter that lists information for a given instance type.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - retrieveAZs: An optional parameter that specifies the Availability Zones for the domain.
    ///   - logger: Logger used for logging
    @inlinable
    public func listInstanceTypeDetailsPaginator(
        domainName: String? = nil,
        engineVersion: String,
        instanceType: String? = nil,
        maxResults: Int? = nil,
        retrieveAZs: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInstanceTypeDetailsRequest, ListInstanceTypeDetailsResponse> {
        let input = ListInstanceTypeDetailsRequest(
            domainName: domainName, 
            engineVersion: engineVersion, 
            instanceType: instanceType, 
            maxResults: maxResults, 
            retrieveAZs: retrieveAZs
        )
        return self.listInstanceTypeDetailsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPackagesForDomain(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPackagesForDomainPaginator(
        _ input: ListPackagesForDomainRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPackagesForDomainRequest, ListPackagesForDomainResponse> {
        return .init(
            input: input,
            command: self.listPackagesForDomain,
            inputKey: \ListPackagesForDomainRequest.nextToken,
            outputKey: \ListPackagesForDomainResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPackagesForDomain(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: The name of the domain for which you want to list associated packages.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPackagesForDomainPaginator(
        domainName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPackagesForDomainRequest, ListPackagesForDomainResponse> {
        let input = ListPackagesForDomainRequest(
            domainName: domainName, 
            maxResults: maxResults
        )
        return self.listPackagesForDomainPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listScheduledActions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listScheduledActionsPaginator(
        _ input: ListScheduledActionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListScheduledActionsRequest, ListScheduledActionsResponse> {
        return .init(
            input: input,
            command: self.listScheduledActions,
            inputKey: \ListScheduledActionsRequest.nextToken,
            outputKey: \ListScheduledActionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listScheduledActions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - domainName: The name of the domain.
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listScheduledActionsPaginator(
        domainName: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListScheduledActionsRequest, ListScheduledActionsResponse> {
        let input = ListScheduledActionsRequest(
            domainName: domainName, 
            maxResults: maxResults
        )
        return self.listScheduledActionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listVersionsPaginator(
        _ input: ListVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListVersionsRequest, ListVersionsResponse> {
        return .init(
            input: input,
            command: self.listVersions,
            inputKey: \ListVersionsRequest.nextToken,
            outputKey: \ListVersionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: An optional parameter that specifies the maximum number of results to return. You can use nextToken to get the next page of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listVersionsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListVersionsRequest, ListVersionsResponse> {
        let input = ListVersionsRequest(
            maxResults: maxResults
        )
        return self.listVersionsPaginator(input, logger: logger)
    }
}

extension OpenSearch.DescribeDomainAutoTunesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribeDomainAutoTunesRequest {
        return .init(
            domainName: self.domainName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.DescribeInboundConnectionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribeInboundConnectionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.DescribeOutboundConnectionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribeOutboundConnectionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.DescribePackagesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribePackagesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.DescribeReservedInstanceOfferingsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribeReservedInstanceOfferingsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            reservedInstanceOfferingId: self.reservedInstanceOfferingId
        )
    }
}

extension OpenSearch.DescribeReservedInstancesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.DescribeReservedInstancesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            reservedInstanceId: self.reservedInstanceId
        )
    }
}

extension OpenSearch.GetPackageVersionHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.GetPackageVersionHistoryRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            packageID: self.packageID
        )
    }
}

extension OpenSearch.GetUpgradeHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.GetUpgradeHistoryRequest {
        return .init(
            domainName: self.domainName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.ListApplicationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListApplicationsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            statuses: self.statuses
        )
    }
}

extension OpenSearch.ListDomainMaintenancesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListDomainMaintenancesRequest {
        return .init(
            action: self.action,
            domainName: self.domainName,
            maxResults: self.maxResults,
            nextToken: token,
            status: self.status
        )
    }
}

extension OpenSearch.ListDomainsForPackageRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListDomainsForPackageRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            packageID: self.packageID
        )
    }
}

extension OpenSearch.ListInstanceTypeDetailsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListInstanceTypeDetailsRequest {
        return .init(
            domainName: self.domainName,
            engineVersion: self.engineVersion,
            instanceType: self.instanceType,
            maxResults: self.maxResults,
            nextToken: token,
            retrieveAZs: self.retrieveAZs
        )
    }
}

extension OpenSearch.ListPackagesForDomainRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListPackagesForDomainRequest {
        return .init(
            domainName: self.domainName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.ListScheduledActionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListScheduledActionsRequest {
        return .init(
            domainName: self.domainName,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension OpenSearch.ListVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> OpenSearch.ListVersionsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
